/*
 * tporo.cpp
 *
 *  Created on: 04/11/2009
 *      Author: javier
 */
#include <iostream>
#include "tporo.h"
#include <fstream>
//#include <cstdlib>
#include <string.h>

using namespace std;


/** Nombre fichero
 *
 */
TPoro::TPoro()
{
	x = y = 0;
	volumen = 0;
	color = NULL;
}

TPoro::TPoro(int px, int py, double pvol)
{
	x = px;
	y = py;
	volumen = pvol;
	color = NULL;
}

TPoro::TPoro(int px, int py, double pvol, char * pcolor)
{
	x = px;
	y = py;
	volumen = pvol;
	
	int lon = 0, i = 0;
	int sumaletras = ('a' - 'A');


	if( pcolor == NULL )
	{
		color = NULL;
	}
	else
	{
		lon = strlen( pcolor);
		color = new char[ strlen(pcolor) + 1];

		if ( color != NULL )
		{

			for( ; i < lon; i++)
			{
				if( pcolor[i] >= 'A' && pcolor[i] <= 'Z')
				{
					//color[i] = (char)( (atoi)pcolor[i] - restaletras);
					color[i] = pcolor[i] + sumaletras;
				}
				else
				{
					color[i] = pcolor[i];
				}
			}
			color[i] = '\0';

		}

	}


}

TPoro::TPoro( const TPoro &p)
{
	x = p.x;
	y = p.y;
	int lon = 0;int sumaletras = ('a' - 'A');
	
	
	volumen = p.volumen;
	if( p.color == NULL)
	{
		color = NULL;
	}
	else
	{
		color = new char[ strlen(p.color) + 1];
	}

	if( color != NULL )
	{
		strcpy(color,p.color);
		
		lon = strlen( p.color );
		//Pasamos a minuscula;
		for(int i = 0; i < lon; i++)
		{
			if( p.color[i] >= 'A' && p.color[i] <= 'Z')
			{
				//color[i] = (char)( (atoi)pcolor[i] - restaletras);
				color[i] = p.color[i] + sumaletras;
			}
			else
			{
				color[i] = p.color[i];
			}
		}
	}

}

TPoro::~TPoro()
{
	x = y = 0;
	volumen = 0;

	if( color != NULL )
	{
		if( strcmp(color, "") ) delete color;
		color = NULL;
	}
}

TPoro &
TPoro::operator=( const TPoro &p)
{
	x = p.x;
	y = p.y;
	volumen = p.volumen;

	if( color != NULL )
		delete color;
	if( p.color == NULL )
	{
		color = NULL;
	}
	else
	{
		color = new char[ strlen(p.color) + 1 ];
	}
	if( color != NULL ) // Comprobar que se haya creado el espacio en memoria;
	{
		strcpy(color,p.color);
	}

	return *this;
}

bool
TPoro::operator ==( const TPoro &p) const
{
	bool igual = false;

	//if ( x == p.x && y == p.y && volumen == p.volumen && !strcmp(color,p.color) )
	if ( x == p.x && y == p.y && volumen == p.volumen )
	{
		if ( color != NULL && p.color != NULL)
		{
			if ( !strcmp( color, p.color) )  igual = true;	
		}
		else if( color == NULL && p.color == NULL )
		{
			igual = true;
		}
	}

	return igual;
}

bool
TPoro::operator !=( const TPoro &p) const
{
	bool distinto = true;

	//if ( x == p.x && y == p.y && volumen == p.volumen && !strcmp(color,p.color) )
	if ( x == p.x && y == p.y && volumen == p.volumen )
	{
		if ( color != NULL && p.color != NULL)
		{
			if ( !strcmp( color, p.color) )  distinto = false;	
		}
		else if( color == NULL && p.color == NULL )
		{
			distinto = false;
		}

	}		

	return distinto;
}

void
TPoro::Posicion(int px, int py)
{
	x = px;
	y = py;
}

void
TPoro::Volumen(double pvolumen)
{
	volumen = pvolumen;
}

void
TPoro::Color( char *pcolor)
{
	int lon = 0;
	int sumaletras = ('a' - 'A');
	
	if (pcolor != NULL )
	{
		if( color == NULL )
		{
			color = new char[ strlen(pcolor +1)];
			
			strcpy( color, pcolor);
		}
		else
		{
			strcpy( color, pcolor);	
		}
		
		lon = strlen( pcolor );
		
		//Pasamos a minuscula;
		for(int i = 0; i < lon; i++)
		{
			if( pcolor[i] >= 'A' && pcolor[i] <= 'Z')
			{
				//color[i] = (char)( (atoi)pcolor[i] - restaletras);
				color[i] = pcolor[i] + sumaletras;
			}
			else
			{
				color[i] = pcolor[i];
			}
		}
	}
	else color = NULL;
}

int
TPoro::PosicionX() const
{
	return x;
}

int
TPoro::PosicionY() const
{
	return y;
}

double
TPoro::Volumen() const
{
	return volumen;
}

char *
TPoro::Color() const
{
	return color;
}

bool
TPoro::EsVacio()
{
	bool esvacio = false;

	if( x == 0 && y == 0 && volumen == 0 && color == NULL)
		esvacio = true;

	return esvacio;
}

ostream &
operator<<( ostream &os, const TPoro &p)
{

	if( p.color == NULL && p.volumen == 0 && p.x == 0 && p.y == 0)
	{
		os << "()";
	}
	else
	{
		os << "(" << p.x << ", " << p.y << ")" << " ";

		os.setf(ios::fixed);
		cout.precision( 2 );
		os <<  p.volumen << " ";

		if ( p.color == NULL )
		{
			os << "-";
		}
		else
		{
			os << p.color;

		}
	}

	return os;
}
